package com.mashibing.leetcode.arr;

import java.util.HashMap;
import java.util.Map;

public class LongestSubstring {
    /**
     * map (k, v)，其中 key 值为字符，value 值为字符位置;
     */
    public int lengthOfLongestSubstring(String s) {
        int length = s.length();
        int max = 0;
        Map<Character, Integer> map = new HashMap<>();
        for(int start = 0, end = 0; end < length; end++){
            char element = s.charAt(end);
            if(map.containsKey(element)){//当窗口内出现重复数字时，调整左边界 形成一个新窗口,记录旧窗口的最大值
                start = Math.max(map.get(element) + 1, start); //map.get()的地方进行+1操作
            }
            max = Math.max(max, end - start + 1);
            map.put(element, end);
        }
        return max;
    }
    public int lengthOfLongestSubstring2(String s) {
        int start=0,end=0,ans=0;
        HashMap<Character, Integer> map = new HashMap<Character, Integer>();//key值为的字符 value字符位置 +1    加 1 表示从字符位置后一个才开始不重复
        while (end<s.length()){
            char alpha=s.charAt(end);
            if (map.containsKey(alpha)){//当窗口内出现重复数字时，调整左边界
                start=Math.max(map.get(alpha),start);
            }
            ans = Math.max(ans, end - start + 1);
            map.put(s.charAt(end), end + 1);
            end++;
        }
        return ans;
    }
    public static void main(String[] args) {
        LongestSubstring longestSubstring = new LongestSubstring();
        int ans =longestSubstring.lengthOfLongestSubstring("abcabcd");
        System.out.println(ans);
    }

}
